import pandas as pd
import numpy as np
data = pd.read_csv("zomato.csv",encoding="latin-1")
data.shape
(9551, 21)
data.head()
| Restaurant ID | Restaurant Name | Country Code | City | Address | Locality | Locality Verbose | Longitude | Latitude | Cuisines | ... | Currency | Has Table booking | Has Online delivery | Is delivering now | Switch to order menu | Price range | Aggregate rating | Rating color | Rating text | Votes | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 6317637 | Le Petit Souffle | 162 | Makati City | Third Floor, Century City Mall, Kalayaan Avenu... | Century City Mall, Poblacion, Makati City | Century City Mall, Poblacion, Makati City, Mak... | 121.027535 | 14.565443 | French, Japanese, Desserts | ... | Botswana Pula(P) | Yes | No | No | No | 3 | 4.8 | Dark Green | Excellent | 314 |
| 1 | 6304287 | Izakaya Kikufuji | 162 | Makati City | Little Tokyo, 2277 Chino Roces Avenue, Legaspi... | Little Tokyo, Legaspi Village, Makati City | Little Tokyo, Legaspi Village, Makati City, Ma... | 121.014101 | 14.553708 | Japanese | ... | Botswana Pula(P) | Yes | No | No | No | 3 | 4.5 | Dark Green | Excellent | 591 |
| 2 | 6300002 | Heat - Edsa Shangri-La | 162 | Mandaluyong City | Edsa Shangri-La, 1 Garden Way, Ortigas, Mandal... | Edsa Shangri-La, Ortigas, Mandaluyong City | Edsa Shangri-La, Ortigas, Mandaluyong City, Ma... | 121.056831 | 14.581404 | Seafood, Asian, Filipino, Indian | ... | Botswana Pula(P) | Yes | No | No | No | 4 | 4.4 | Green | Very Good | 270 |
| 3 | 6318506 | Ooma | 162 | Mandaluyong City | Third Floor, Mega Fashion Hall, SM Megamall, O... | SM Megamall, Ortigas, Mandaluyong City | SM Megamall, Ortigas, Mandaluyong City, Mandal... | 121.056475 | 14.585318 | Japanese, Sushi | ... | Botswana Pula(P) | No | No | No | No | 4 | 4.9 | Dark Green | Excellent | 365 |
| 4 | 6314302 | Sambo Kojin | 162 | Mandaluyong City | Third Floor, Mega Atrium, SM Megamall, Ortigas... | SM Megamall, Ortigas, Mandaluyong City | SM Megamall, Ortigas, Mandaluyong City, Mandal... | 121.057508 | 14.584450 | Japanese, Korean | ... | Botswana Pula(P) | Yes | No | No | No | 4 | 4.8 | Dark Green | Excellent | 229 |
5 rows × 21 columns
data.dtypes
Restaurant ID int64 Restaurant Name object Country Code int64 City object Address object Locality object Locality Verbose object Longitude float64 Latitude float64 Cuisines object Average Cost for two int64 Currency object Has Table booking object Has Online delivery object Is delivering now object Switch to order menu object Price range int64 Aggregate rating float64 Rating color object Rating text object Votes int64 dtype: object
data.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 9551 entries, 0 to 9550 Data columns (total 21 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Restaurant ID 9551 non-null int64 1 Restaurant Name 9551 non-null object 2 Country Code 9551 non-null int64 3 City 9551 non-null object 4 Address 9551 non-null object 5 Locality 9551 non-null object 6 Locality Verbose 9551 non-null object 7 Longitude 9551 non-null float64 8 Latitude 9551 non-null float64 9 Cuisines 9542 non-null object 10 Average Cost for two 9551 non-null int64 11 Currency 9551 non-null object 12 Has Table booking 9551 non-null object 13 Has Online delivery 9551 non-null object 14 Is delivering now 9551 non-null object 15 Switch to order menu 9551 non-null object 16 Price range 9551 non-null int64 17 Aggregate rating 9551 non-null float64 18 Rating color 9551 non-null object 19 Rating text 9551 non-null object 20 Votes 9551 non-null int64 dtypes: float64(3), int64(5), object(13) memory usage: 1.5+ MB
data.Votes.max()
10934
data.isnull()
| Restaurant ID | Restaurant Name | Country Code | City | Address | Locality | Locality Verbose | Longitude | Latitude | Cuisines | ... | Currency | Has Table booking | Has Online delivery | Is delivering now | Switch to order menu | Price range | Aggregate rating | Rating color | Rating text | Votes | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | False | False | False | False | False | False | False | False | False | False | ... | False | False | False | False | False | False | False | False | False | False |
| 1 | False | False | False | False | False | False | False | False | False | False | ... | False | False | False | False | False | False | False | False | False | False |
| 2 | False | False | False | False | False | False | False | False | False | False | ... | False | False | False | False | False | False | False | False | False | False |
| 3 | False | False | False | False | False | False | False | False | False | False | ... | False | False | False | False | False | False | False | False | False | False |
| 4 | False | False | False | False | False | False | False | False | False | False | ... | False | False | False | False | False | False | False | False | False | False |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 9546 | False | False | False | False | False | False | False | False | False | False | ... | False | False | False | False | False | False | False | False | False | False |
| 9547 | False | False | False | False | False | False | False | False | False | False | ... | False | False | False | False | False | False | False | False | False | False |
| 9548 | False | False | False | False | False | False | False | False | False | False | ... | False | False | False | False | False | False | False | False | False | False |
| 9549 | False | False | False | False | False | False | False | False | False | False | ... | False | False | False | False | False | False | False | False | False | False |
| 9550 | False | False | False | False | False | False | False | False | False | False | ... | False | False | False | False | False | False | False | False | False | False |
9551 rows × 21 columns
data.isnull().sum()
Restaurant ID 0 Restaurant Name 0 Country Code 0 City 0 Address 0 Locality 0 Locality Verbose 0 Longitude 0 Latitude 0 Cuisines 9 Average Cost for two 0 Currency 0 Has Table booking 0 Has Online delivery 0 Is delivering now 0 Switch to order menu 0 Price range 0 Aggregate rating 0 Rating color 0 Rating text 0 Votes 0 dtype: int64
data.shape
(9551, 21)
9551 rows and 19 columns
data.head()
| Restaurant ID | Restaurant Name | Country Code | City | Address | Locality | Locality Verbose | Longitude | Latitude | Cuisines | ... | Currency | Has Table booking | Has Online delivery | Is delivering now | Switch to order menu | Price range | Aggregate rating | Rating color | Rating text | Votes | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 6317637 | Le Petit Souffle | 162 | Makati City | Third Floor, Century City Mall, Kalayaan Avenu... | Century City Mall, Poblacion, Makati City | Century City Mall, Poblacion, Makati City, Mak... | 121.027535 | 14.565443 | French, Japanese, Desserts | ... | Botswana Pula(P) | Yes | No | No | No | 3 | 4.8 | Dark Green | Excellent | 314 |
| 1 | 6304287 | Izakaya Kikufuji | 162 | Makati City | Little Tokyo, 2277 Chino Roces Avenue, Legaspi... | Little Tokyo, Legaspi Village, Makati City | Little Tokyo, Legaspi Village, Makati City, Ma... | 121.014101 | 14.553708 | Japanese | ... | Botswana Pula(P) | Yes | No | No | No | 3 | 4.5 | Dark Green | Excellent | 591 |
| 2 | 6300002 | Heat - Edsa Shangri-La | 162 | Mandaluyong City | Edsa Shangri-La, 1 Garden Way, Ortigas, Mandal... | Edsa Shangri-La, Ortigas, Mandaluyong City | Edsa Shangri-La, Ortigas, Mandaluyong City, Ma... | 121.056831 | 14.581404 | Seafood, Asian, Filipino, Indian | ... | Botswana Pula(P) | Yes | No | No | No | 4 | 4.4 | Green | Very Good | 270 |
| 3 | 6318506 | Ooma | 162 | Mandaluyong City | Third Floor, Mega Fashion Hall, SM Megamall, O... | SM Megamall, Ortigas, Mandaluyong City | SM Megamall, Ortigas, Mandaluyong City, Mandal... | 121.056475 | 14.585318 | Japanese, Sushi | ... | Botswana Pula(P) | No | No | No | No | 4 | 4.9 | Dark Green | Excellent | 365 |
| 4 | 6314302 | Sambo Kojin | 162 | Mandaluyong City | Third Floor, Mega Atrium, SM Megamall, Ortigas... | SM Megamall, Ortigas, Mandaluyong City | SM Megamall, Ortigas, Mandaluyong City, Mandal... | 121.057508 | 14.584450 | Japanese, Korean | ... | Botswana Pula(P) | Yes | No | No | No | 4 | 4.8 | Dark Green | Excellent | 229 |
5 rows × 21 columns
## first lets check what type of values are there in cuisine column
print(data.Cuisines.dtypes)
object
So the data type is Object, we can replace the missing values with NaN
## filling the missing values in Cuisines column with NaN
data['Cuisines'] = data['Cuisines'].fillna('NaN')
data.isnull().sum()
Restaurant ID 0 Restaurant Name 0 Country Code 0 City 0 Address 0 Locality 0 Locality Verbose 0 Longitude 0 Latitude 0 Cuisines 0 Average Cost for two 0 Currency 0 Has Table booking 0 Has Online delivery 0 Is delivering now 0 Switch to order menu 0 Price range 0 Aggregate rating 0 Rating color 0 Rating text 0 Votes 0 dtype: int64
No null values in Cuisines or any other columns
data.head()
| Restaurant ID | Restaurant Name | Country Code | City | Address | Locality | Locality Verbose | Longitude | Latitude | Cuisines | ... | Currency | Has Table booking | Has Online delivery | Is delivering now | Switch to order menu | Price range | Aggregate rating | Rating color | Rating text | Votes | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 6317637 | Le Petit Souffle | 162 | Makati City | Third Floor, Century City Mall, Kalayaan Avenu... | Century City Mall, Poblacion, Makati City | Century City Mall, Poblacion, Makati City, Mak... | 121.027535 | 14.565443 | French, Japanese, Desserts | ... | Botswana Pula(P) | Yes | No | No | No | 3 | 4.8 | Dark Green | Excellent | 314 |
| 1 | 6304287 | Izakaya Kikufuji | 162 | Makati City | Little Tokyo, 2277 Chino Roces Avenue, Legaspi... | Little Tokyo, Legaspi Village, Makati City | Little Tokyo, Legaspi Village, Makati City, Ma... | 121.014101 | 14.553708 | Japanese | ... | Botswana Pula(P) | Yes | No | No | No | 3 | 4.5 | Dark Green | Excellent | 591 |
| 2 | 6300002 | Heat - Edsa Shangri-La | 162 | Mandaluyong City | Edsa Shangri-La, 1 Garden Way, Ortigas, Mandal... | Edsa Shangri-La, Ortigas, Mandaluyong City | Edsa Shangri-La, Ortigas, Mandaluyong City, Ma... | 121.056831 | 14.581404 | Seafood, Asian, Filipino, Indian | ... | Botswana Pula(P) | Yes | No | No | No | 4 | 4.4 | Green | Very Good | 270 |
| 3 | 6318506 | Ooma | 162 | Mandaluyong City | Third Floor, Mega Fashion Hall, SM Megamall, O... | SM Megamall, Ortigas, Mandaluyong City | SM Megamall, Ortigas, Mandaluyong City, Mandal... | 121.056475 | 14.585318 | Japanese, Sushi | ... | Botswana Pula(P) | No | No | No | No | 4 | 4.9 | Dark Green | Excellent | 365 |
| 4 | 6314302 | Sambo Kojin | 162 | Mandaluyong City | Third Floor, Mega Atrium, SM Megamall, Ortigas... | SM Megamall, Ortigas, Mandaluyong City | SM Megamall, Ortigas, Mandaluyong City, Mandal... | 121.057508 | 14.584450 | Japanese, Korean | ... | Botswana Pula(P) | Yes | No | No | No | 4 | 4.8 | Dark Green | Excellent | 229 |
5 rows × 21 columns
Let us load that data set first
data1 = pd.read_excel("Country-Code.xlsx")
data1.head()
| Country Code | Country | |
|---|---|---|
| 0 | 1 | India |
| 1 | 14 | Australia |
| 2 | 30 | Brazil |
| 3 | 37 | Canada |
| 4 | 94 | Indonesia |
data1.shape
(15, 2)
15 rows and 2 columns
data1.describe()
| Country Code | |
|---|---|
| count | 15.000000 |
| mean | 137.933333 |
| std | 80.009345 |
| min | 1.000000 |
| 25% | 65.500000 |
| 50% | 166.000000 |
| 75% | 199.500000 |
| max | 216.000000 |
Does not make sense to calculate mean, median etc for Country_Code, data1.describe is just done for the sake of it
data1.dtypes
Country Code int64 Country object dtype: object
Information about the data type of the two columns
data1.isnull()
| Country Code | Country | |
|---|---|---|
| 0 | False | False |
| 1 | False | False |
| 2 | False | False |
| 3 | False | False |
| 4 | False | False |
| 5 | False | False |
| 6 | False | False |
| 7 | False | False |
| 8 | False | False |
| 9 | False | False |
| 10 | False | False |
| 11 | False | False |
| 12 | False | False |
| 13 | False | False |
| 14 | False | False |
We can glance on our result and infer that there are no null values
data1.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 15 entries, 0 to 14 Data columns (total 2 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Country Code 15 non-null int64 1 Country 15 non-null object dtypes: int64(1), object(1) memory usage: 372.0+ bytes
Information about the Country_Code data frame
final_data=pd.merge(data,data1,on='Country Code',how='left')
final_data.head()
| Restaurant ID | Restaurant Name | Country Code | City | Address | Locality | Locality Verbose | Longitude | Latitude | Cuisines | ... | Has Table booking | Has Online delivery | Is delivering now | Switch to order menu | Price range | Aggregate rating | Rating color | Rating text | Votes | Country | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 6317637 | Le Petit Souffle | 162 | Makati City | Third Floor, Century City Mall, Kalayaan Avenu... | Century City Mall, Poblacion, Makati City | Century City Mall, Poblacion, Makati City, Mak... | 121.027535 | 14.565443 | French, Japanese, Desserts | ... | Yes | No | No | No | 3 | 4.8 | Dark Green | Excellent | 314 | Phillipines |
| 1 | 6304287 | Izakaya Kikufuji | 162 | Makati City | Little Tokyo, 2277 Chino Roces Avenue, Legaspi... | Little Tokyo, Legaspi Village, Makati City | Little Tokyo, Legaspi Village, Makati City, Ma... | 121.014101 | 14.553708 | Japanese | ... | Yes | No | No | No | 3 | 4.5 | Dark Green | Excellent | 591 | Phillipines |
| 2 | 6300002 | Heat - Edsa Shangri-La | 162 | Mandaluyong City | Edsa Shangri-La, 1 Garden Way, Ortigas, Mandal... | Edsa Shangri-La, Ortigas, Mandaluyong City | Edsa Shangri-La, Ortigas, Mandaluyong City, Ma... | 121.056831 | 14.581404 | Seafood, Asian, Filipino, Indian | ... | Yes | No | No | No | 4 | 4.4 | Green | Very Good | 270 | Phillipines |
| 3 | 6318506 | Ooma | 162 | Mandaluyong City | Third Floor, Mega Fashion Hall, SM Megamall, O... | SM Megamall, Ortigas, Mandaluyong City | SM Megamall, Ortigas, Mandaluyong City, Mandal... | 121.056475 | 14.585318 | Japanese, Sushi | ... | No | No | No | No | 4 | 4.9 | Dark Green | Excellent | 365 | Phillipines |
| 4 | 6314302 | Sambo Kojin | 162 | Mandaluyong City | Third Floor, Mega Atrium, SM Megamall, Ortigas... | SM Megamall, Ortigas, Mandaluyong City | SM Megamall, Ortigas, Mandaluyong City, Mandal... | 121.057508 | 14.584450 | Japanese, Korean | ... | Yes | No | No | No | 4 | 4.8 | Dark Green | Excellent | 229 | Phillipines |
5 rows × 22 columns
final_data.shape
(9551, 22)
We now have 9551 entries which are the total number of restaurants listed on Zomato world wide and corresponding to those 9551 restaurants we have 17 columns which gives us a brief description about a particular restaurant. This concludes our data cleaning part. Let us now move onto our analysis part.
Let us find out which country has the highest number of restaurants listed on Zomato
final_data.Country.value_counts()
India 8652 United States 434 United Kingdom 80 Brazil 60 UAE 60 South Africa 60 New Zealand 40 Turkey 34 Australia 24 Phillipines 22 Indonesia 21 Singapore 20 Qatar 20 Sri Lanka 20 Canada 4 Name: Country, dtype: int64
It is clear from the above values that India has the highest number of restaurants.
final_data.Country
0 Phillipines
1 Phillipines
2 Phillipines
3 Phillipines
4 Phillipines
...
9546 Turkey
9547 Turkey
9548 Turkey
9549 Turkey
9550 Turkey
Name: Country, Length: 9551, dtype: object
country_name = final_data.Country.value_counts().index
country_name
Index(['India', 'United States', 'United Kingdom', 'Brazil', 'UAE',
'South Africa', 'New Zealand', 'Turkey', 'Australia', 'Phillipines',
'Indonesia', 'Singapore', 'Qatar', 'Sri Lanka', 'Canada'],
dtype='object')
country_value = final_data.Country.value_counts().values
country_value
array([8652, 434, 80, 60, 60, 60, 40, 34, 24, 22, 21,
20, 20, 20, 4], dtype=int64)
import plotly.graph_objects as plt
labels = country_name
values = country_value
fig = plt.Figure(data=[plt.Pie(labels=labels[:5], values=values[:5])])
fig.show()
This pie chart clearly visualises that Zomato is India based, as India accounts for 93.2% of the total restaurants listed on Zomato in the whole world. United States is second with only 4.67% of the total number of restaurants. We can also almost vaguely and roughly assume that Zomato is an Indian company.
ratings = data.groupby(['Aggregate rating','Rating color', 'Rating text']).size().reset_index().rename(columns={0:'Rating Count'})
ratings
| Aggregate rating | Rating color | Rating text | Rating Count | |
|---|---|---|---|---|
| 0 | 0.0 | White | Not rated | 2148 |
| 1 | 1.8 | Red | Poor | 1 |
| 2 | 1.9 | Red | Poor | 2 |
| 3 | 2.0 | Red | Poor | 7 |
| 4 | 2.1 | Red | Poor | 15 |
| 5 | 2.2 | Red | Poor | 27 |
| 6 | 2.3 | Red | Poor | 47 |
| 7 | 2.4 | Red | Poor | 87 |
| 8 | 2.5 | Orange | Average | 110 |
| 9 | 2.6 | Orange | Average | 191 |
| 10 | 2.7 | Orange | Average | 250 |
| 11 | 2.8 | Orange | Average | 315 |
| 12 | 2.9 | Orange | Average | 381 |
| 13 | 3.0 | Orange | Average | 468 |
| 14 | 3.1 | Orange | Average | 519 |
| 15 | 3.2 | Orange | Average | 522 |
| 16 | 3.3 | Orange | Average | 483 |
| 17 | 3.4 | Orange | Average | 498 |
| 18 | 3.5 | Yellow | Good | 480 |
| 19 | 3.6 | Yellow | Good | 458 |
| 20 | 3.7 | Yellow | Good | 427 |
| 21 | 3.8 | Yellow | Good | 400 |
| 22 | 3.9 | Yellow | Good | 335 |
| 23 | 4.0 | Green | Very Good | 266 |
| 24 | 4.1 | Green | Very Good | 274 |
| 25 | 4.2 | Green | Very Good | 221 |
| 26 | 4.3 | Green | Very Good | 174 |
| 27 | 4.4 | Green | Very Good | 144 |
| 28 | 4.5 | Dark Green | Excellent | 95 |
| 29 | 4.6 | Dark Green | Excellent | 78 |
| 30 | 4.7 | Dark Green | Excellent | 42 |
| 31 | 4.8 | Dark Green | Excellent | 25 |
| 32 | 4.9 | Dark Green | Excellent | 61 |
We can easily observe the table and find how the ratings are ditributed, the color associated with each rating and also the number of the reviews each rating has received.
Rating 0 - White - Not rated
Rating 1.8 to 2.4 - Red - Poor
Rating 2.5 to 3.4 - Orange - Average
Rating 3.5 to 3.9 - Yellow - Good
Rating 4.0 to 4.4 - Green - Very Good
Rating 4.5 to 4.9 - Dark Green - Excellent
import plotly.express as px
fig = px.bar(ratings,
x='Rating color',
#marginal='box',
color='Rating text',
y='Rating Count',
color_discrete_sequence=['White', 'Red','Orange','Yellow','Green',"Darkgreen"],
title='Rating Distribution')
fig.update_layout(bargap=0.1)
fig.show()
Observations: Not rated count is very high, we need to see what is the cause of it.
Clearly, among all the restaurants, orange rated(average)(2.5-3.4) is the most common frequent rating.
No_rating = final_data[final_data['Rating color']=='White'].groupby('Country').size().reset_index().rename(columns={0:'Rating Count'})
No_rating
| Country | Rating Count | |
|---|---|---|
| 0 | Brazil | 5 |
| 1 | India | 2139 |
| 2 | United Kingdom | 1 |
| 3 | United States | 3 |
We see that India has come out on top. :p
This can be because Indians are still coming to terms with online food ordering or it can be that we just like to sit back and relax after having our food. :D
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(12,6))
sns.barplot(x='Aggregate rating',y='Rating Count',data=ratings)
plt.show()
We see that the highest number of ratings recieved is around 3.0 to 3.8, this may happen because the number of restaurants which have high rating is low in number. India has the most number of restaurants and many restaurants fall into the bucket of 3 to 4 rating range. So this might be affecting our analysis here.
country_currency = final_data[['Country','Currency']].groupby(['Country','Currency']).size().reset_index(name='count').drop('count', axis=1, inplace=False)
country_currency
| Country | Currency | |
|---|---|---|
| 0 | Australia | Dollar($) |
| 1 | Brazil | Brazilian Real(R$) |
| 2 | Canada | Dollar($) |
| 3 | India | Indian Rupees(Rs.) |
| 4 | Indonesia | Indonesian Rupiah(IDR) |
| 5 | New Zealand | NewZealand($) |
| 6 | Phillipines | Botswana Pula(P) |
| 7 | Qatar | Qatari Rial(QR) |
| 8 | Singapore | Dollar($) |
| 9 | South Africa | Rand(R) |
| 10 | Sri Lanka | Sri Lankan Rupee(LKR) |
| 11 | Turkey | Turkish Lira(TL) |
| 12 | UAE | Emirati Diram(AED) |
| 13 | United Kingdom | Pounds(£) |
| 14 | United States | Dollar($) |
We observe and can easily find out which country uses what currency.
fig = px.pie(final_data, names="Has Online delivery", title='Online Deliveries')
fig.show()
We see that 74% or almost 3/4th of the total restaurants do not accept online orders. This may be due to a variety of reasons such as, maybe the restaurants are of small scale therefore they do not have enough profit margin while selling through zomato, or the restaurant is of huge scale. I have been to some restaurants where the prices start at Rs. 800-900 for just one dish! This makes it clear that such restaurants will not be having online food deliveries, because after a meal, just the tax is around 300-400, with which we can have a full fledged meal at a good restaurant. I would like to add that some restaurants simply do not want to deliver online, because they choose not to, do not want the hassle or maybe due some orthodox beliefs. These restaurants are small scale, but large in number.
country_online_delivery = final_data[["Has Online delivery", 'Country']].groupby(["Has Online delivery", 'Country']).size().reset_index(name='Count')
country_online_delivery
| Has Online delivery | Country | Count | |
|---|---|---|---|
| 0 | No | Australia | 24 |
| 1 | No | Brazil | 60 |
| 2 | No | Canada | 4 |
| 3 | No | India | 6229 |
| 4 | No | Indonesia | 21 |
| 5 | No | New Zealand | 40 |
| 6 | No | Phillipines | 22 |
| 7 | No | Qatar | 20 |
| 8 | No | Singapore | 20 |
| 9 | No | South Africa | 60 |
| 10 | No | Sri Lanka | 20 |
| 11 | No | Turkey | 34 |
| 12 | No | UAE | 32 |
| 13 | No | United Kingdom | 80 |
| 14 | No | United States | 434 |
| 15 | Yes | India | 2423 |
| 16 | Yes | UAE | 28 |
Only India and UAE have online delivery, India tops the list of having most number of restaurants having online deliveries. All other countries do not deliver online. India also tops the list of countries having restaurants not delivering online. Shows that India is a leader.
Extarcting the top 25 restaurants.
final_data.loc[final_data['Rating text'].isin(['Excellent'])].Cuisines.value_counts().sort_values(ascending=False).reset_index().head()
| index | Cuisines | |
|---|---|---|
| 0 | Cafe | 8 |
| 1 | North Indian | 7 |
| 2 | Italian | 7 |
| 3 | Indian | 5 |
| 4 | Seafood | 5 |
Fetching the resturants having 'Excellent' and 'Very Good' rating
good_cuisine = final_data.loc[final_data['Rating text'].isin(['Excellent'])]
good_cuisine = good_cuisine.Cuisines.value_counts().reset_index().head(25)
## Extracing all the cuisens in a single list
cuisines = []
# Iterate over the 'Cuisines' column in the DataFrame
for cuisine in good_cuisine['Cuisines']:
cuisines.append(cuisine)
cuisines
[8, 7, 7, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
sns.barplot(y = 'index', x = 'Cuisines', data = good_cuisine) # Use 'count' instead of 'counts' for y-axis
plt.show()
Graph shows us the number of cuisines each type of restaurant has. As expected Cafes serve the most number of cuisines and Bakery, Deserts serving the the least number of cuisines.
costly_zomato = final_data.nlargest(25, 'Average Cost for two')
costly_zomato
| Restaurant ID | Restaurant Name | Country Code | City | Address | Locality | Locality Verbose | Longitude | Latitude | Cuisines | ... | Has Table booking | Has Online delivery | Is delivering now | Switch to order menu | Price range | Aggregate rating | Rating color | Rating text | Votes | Country | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 9283 | 7402935 | Skye | 94 | Jakarta | Menara BCA, Lantai 56, Jl. MH. Thamrin, Thamri... | Grand Indonesia Mall, Thamrin | Grand Indonesia Mall, Thamrin, Jakarta | 106.821999 | -6.196778 | Italian, Continental | ... | No | No | No | No | 3 | 4.1 | Green | Very Good | 1498 | Indonesia |
| 9284 | 7410290 | Satoo - Hotel Shangri-La | 94 | Jakarta | Hotel Shangri-La, Jl. Jend. Sudirman | Hotel Shangri-La, Sudirman | Hotel Shangri-La, Sudirman, Jakarta | 106.818961 | -6.203292 | Asian, Indonesian, Western | ... | No | No | No | No | 3 | 4.6 | Dark Green | Excellent | 873 | Indonesia |
| 9287 | 7420899 | Sushi Masa | 94 | Jakarta | Jl. Tuna Raya No. 5, Penjaringan | Penjaringan | Penjaringan, Jakarta | 106.800144 | -6.101298 | Sushi, Japanese | ... | No | No | No | No | 3 | 4.9 | Dark Green | Excellent | 605 | Indonesia |
| 9289 | 7421967 | 3 Wise Monkeys | 94 | Jakarta | Jl. Suryo No. 26, Senopati, Jakarta | Senopati | Senopati, Jakarta | 106.813400 | -6.235241 | Japanese | ... | No | No | No | No | 3 | 4.2 | Green | Very Good | 395 | Indonesia |
| 9294 | 7422489 | Avec Moi Restaurant and Bar | 94 | Jakarta | Gedung PIC, Jl. Teluk Betung 43, Thamrin, Jakarta | Thamrin | Thamrin, Jakarta | 106.821023 | -6.196270 | French, Western | ... | No | No | No | No | 3 | 4.3 | Green | Very Good | 243 | Indonesia |
| 9288 | 18352452 | Lucky Cat Coffee & Kitchen | 94 | Jakarta | Plaza Festival, South Parking, Jl. HR Rasuna S... | Plaza Festival, Kuningan | Plaza Festival, Kuningan, Jakarta | 106.831748 | -6.218932 | Cafe, Western | ... | No | No | No | No | 3 | 4.3 | Green | Very Good | 458 | Indonesia |
| 9295 | 18386856 | Onokabe | 94 | Tangerang | Alam Sutera Town Center, Jl. Alam Utama, Serpo... | Alam Sutera Town Center, Serpong Utara | Alam Sutera Town Center, Serpong Utara, Tangerang | 106.652688 | -6.241792 | Indonesian | ... | No | No | No | No | 3 | 3.7 | Yellow | Good | 155 | Indonesia |
| 9278 | 7423482 | Lemongrass | 94 | Bogor | Jl. Raya Pajajaran No. 21, Bogor Utara, Bogor | Bogor Utara | Bogor Utara, Bogor | 106.807850 | -6.576578 | Peranakan, Indonesian | ... | No | No | No | No | 3 | 4.0 | Green | Very Good | 1159 | Indonesia |
| 9285 | 18391256 | MONKS | 94 | Jakarta | Komplek Graha Boulevard Timur, Summarecon Kela... | Kelapa Gading | Kelapa Gading, Jakarta | 106.911335 | -6.163948 | Western, Asian, Cafe | ... | No | No | No | No | 3 | 4.2 | Green | Very Good | 259 | Indonesia |
| 9279 | 7422633 | Talaga Sampireun | 94 | Jakarta | Jl. Lingkar Luar Barat | Cengkareng | Cengkareng, Jakarta | 106.728508 | -6.168467 | Sunda, Indonesian | ... | No | No | No | No | 3 | 4.9 | Dark Green | Excellent | 1662 | Indonesia |
| 9281 | 18425821 | OJJU | 94 | Jakarta | Gandaria City, Lantai Upper Ground, Jl. Sultan... | Gandaria City Mall, Gandaria | Gandaria City Mall, Gandaria, Jakarta | 106.783162 | -6.244221 | Korean | ... | No | No | No | No | 3 | 3.9 | Yellow | Good | 137 | Indonesia |
| 9282 | 7422751 | Union Deli | 94 | Jakarta | Grand Indonesia Mall, Lantai Ground, East Mall... | Grand Indonesia Mall, Thamrin | Grand Indonesia Mall, Thamrin, Jakarta | 106.819749 | -6.197150 | Desserts, Bakery, Western | ... | No | No | No | No | 3 | 4.6 | Dark Green | Excellent | 903 | Indonesia |
| 9286 | 7400818 | Zenbu | 94 | Jakarta | Kota Kasablanka, Lantai Upper Ground, Food Soc... | Kota Kasablanka, Tebet | Kota Kasablanka, Tebet, Jakarta | 106.842500 | -6.224333 | Japanese, Sushi, Ramen | ... | No | No | No | No | 3 | 4.4 | Green | Very Good | 841 | Indonesia |
| 9291 | 7417455 | Talaga Sampireun | 94 | Jakarta | Taman Impian Jaya Ancol, Jl. Lapangan Golf 7, ... | Taman Impian Jaya Ancol, Ancol | Taman Impian Jaya Ancol, Ancol, Jakarta | 106.833553 | -6.126860 | Sunda, Indonesian | ... | No | No | No | No | 3 | 4.9 | Dark Green | Excellent | 1640 | Indonesia |
| 9296 | 7417450 | Talaga Sampireun | 94 | Tangerang | Jl. Boulevard Bintaro Jaya Blok B7/N1, Bintaro... | Pondok Aren | Pondok Aren, Tangerang | 106.726119 | -6.269914 | Sunda, Indonesian | ... | No | No | No | No | 3 | 4.9 | Dark Green | Excellent | 2212 | Indonesia |
| 9280 | 7405789 | Toodz House | 94 | Jakarta | Jl. Cipete Raya No. 79, Fatmawati, Jakarta | Fatmawati | Fatmawati, Jakarta | 106.801782 | -6.278012 | Cafe, Italian, Coffee and Tea, Western, Indone... | ... | No | No | No | No | 3 | 4.6 | Dark Green | Excellent | 1476 | Indonesia |
| 9276 | 18400530 | Noah's Barn Coffeenery | 94 | Bandung | Jl. Dayang Sumbi No. 2, Dago, Bandung | Dago | Dago, Bandung | 107.612790 | -6.887058 | Cafe, Coffee and Tea, Western | ... | No | No | No | No | 3 | 4.2 | Green | Very Good | 22 | Indonesia |
| 9290 | 18370659 | Flip Burger | 94 | Jakarta | Jl. Senopati No. 27, Senopati, Jakarta | Senopati | Senopati, Jakarta | 106.808550 | -6.230775 | Burger | ... | No | No | No | No | 3 | 4.4 | Green | Very Good | 410 | Indonesia |
| 9292 | 18409146 | Fish Streat | 94 | Jakarta | Jl. Tanjung Duren Utara III, Blok M Kav. 32, T... | Tanjung Duren | Tanjung Duren, Jakarta | 0.000000 | 0.000000 | Seafood, Western | ... | No | No | No | No | 3 | 3.4 | Orange | Average | 152 | Indonesia |
| 9293 | 18408381 | Fish Streat | 94 | Jakarta | Jl. Tebet Timur Dalam Raya 44B, Tebet, Jakarta | Tebet | Tebet, Jakarta | 106.856413 | -6.232816 | Seafood, Western | ... | No | No | No | No | 3 | 4.0 | Green | Very Good | 331 | Indonesia |
| 9277 | 7423620 | Momo Milk | 94 | Bogor | Jl. Kantor Pos No. 6, Bogor Timur, Bogor | Bogor Timur | Bogor Timur, Bogor | 106.810301 | -6.606917 | Cafe, Desserts, Beverages | ... | No | No | No | No | 2 | 3.7 | Yellow | Good | 783 | Indonesia |
| 7543 | 2701 | Orient Express - Taj Palace Hotel | 1 | New Delhi | Taj Palace Hotel, Diplomatic Enclave, Chanakya... | The Taj Palace Hotel, Chanakyapuri | The Taj Palace Hotel, Chanakyapuri, New Delhi | 77.170087 | 28.595008 | European | ... | Yes | No | No | No | 4 | 4.0 | Green | Very Good | 145 | India |
| 4088 | 309548 | Tian - Asian Cuisine Studio - ITC Maurya | 1 | New Delhi | ITC Maurya, Diplomatic Enclave, Chanakyapuri, ... | ITC Maurya, Chanakyapuri | ITC Maurya, Chanakyapuri, New Delhi | 77.173455 | 28.597351 | Asian, Japanese, Korean, Thai, Chinese | ... | No | No | No | No | 4 | 4.1 | Green | Very Good | 188 | India |
| 4087 | 2742 | Bukhara - ITC Maurya | 1 | New Delhi | ITC Maurya, Chanakyapuri, New Delhi | ITC Maurya, Chanakyapuri | ITC Maurya, Chanakyapuri, New Delhi | 77.173724 | 28.597466 | North Indian | ... | No | No | No | No | 4 | 4.4 | Green | Very Good | 2826 | India |
| 8 | 6300010 | Spiral - Sofitel Philippine Plaza Manila | 162 | Pasay City | Plaza Level, Sofitel Philippine Plaza Manila, ... | Sofitel Philippine Plaza Manila, Pasay City | Sofitel Philippine Plaza Manila, Pasay City, P... | 120.980090 | 14.552990 | European, Asian, Indian | ... | Yes | No | No | No | 4 | 4.9 | Dark Green | Excellent | 621 | Phillipines |
25 rows × 22 columns
costly_zomato.columns
Index(['Restaurant ID', 'Restaurant Name', 'Country Code', 'City', 'Address',
'Locality', 'Locality Verbose', 'Longitude', 'Latitude', 'Cuisines',
'Average Cost for two', 'Currency', 'Has Table booking',
'Has Online delivery', 'Is delivering now', 'Switch to order menu',
'Price range', 'Aggregate rating', 'Rating color', 'Rating text',
'Votes', 'Country'],
dtype='object')
fig = px.bar(costly_zomato,
x='Restaurant Name',
color='City',
y='Average Cost for two',
title='Costly restaurants around the globe for 2 people')
fig.update_layout(bargap=0.1)
fig.show()
This graph shows us the costly restaurants around the globe for two people. City of Jakarta leads with the least being Bogor.
final_data.columns
Index(['Restaurant ID', 'Restaurant Name', 'Country Code', 'City', 'Address',
'Locality', 'Locality Verbose', 'Longitude', 'Latitude', 'Cuisines',
'Average Cost for two', 'Currency', 'Has Table booking',
'Has Online delivery', 'Is delivering now', 'Switch to order menu',
'Price range', 'Aggregate rating', 'Rating color', 'Rating text',
'Votes', 'Country'],
dtype='object')
import plotly.express as px
fig = px.scatter_mapbox(final_data, lat="Latitude", lon="Longitude", hover_name="City", hover_data=["Aggregate rating",
"Restaurant Name","Average Cost for two",
"Price range", 'Rating text'],
color_discrete_sequence=["green"], zoom=10, height=300)
fig.update_layout(mapbox_style="open-street-map")
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.update_layout(title='Top 25 costly Resturants Location',
autosize=True,
showlegend=False)
fig.update_layout(
autosize=False,
width=800,
height=500,)
fig.show()
Map displaying all the places where there are costly restaurants for two.
final_data[(final_data['Average Cost for two']<10000) & (final_data['Aggregate rating']!=0)].plot.scatter(x = 'Average Cost for two', y = 'Aggregate rating', figsize=(15,7), title="The dependence of the rating on the price for two")
plt.show()
This graph shows us how the Price range is distributed around the aggregrate rating. The maximum number of restaurants falls in the 0 - 1000 price range and 2.5 to 4.0 rating.
scatter_price_rating = final_data.plot.scatter('Aggregate rating','Votes',figsize = (7,5))
plt.title("Relationship betweeen Votes and Aggregate rating")
plt.show()
This graph shows us the relationship between the number of votes and Aggregrate Rating. We see that the maximum number of ratings lie between 3.5 to 4.8 whereas the frequency of votes which they have received are in the range 0-2000
n = ['Price range', 'Aggregate rating', 'Votes', 'Average Cost for two']
sns.pairplot(final_data[n])
plt.show()
final_data['Restaurant Name'].value_counts()
Cafe Coffee Day 83
Domino's Pizza 79
Subway 63
Green Chick Chop 51
McDonald's 48
..
Odeon Social 1
Johnny Rockets 1
House of Commons 1
HotMess 1
Walter's Coffee Roastery 1
Name: Restaurant Name, Length: 7446, dtype: int64
final_data[["Average Cost for two"]].mean()
Average Cost for two 1199.210763 dtype: float64
Thus the mean of Average Price for two people is 1199.210763
sns.boxplot(x = "Has Table booking", y = "Aggregate rating", data = final_data)
plt.title('The dependence of the rating on the availability of table reservations')
plt.show()
The restaurants that have table reservations have a rating of around 3.8 whereas those which do not have table booking have aggregrate rating of around 3.1. The lower rating for restaurants may be primarily because customers had to return due unavailibility of a table or they might have rated the restaurant lower simply because it did not have table booking. In contrast those having table booking are less in number and have a higher rating. This statistic may be biased because the number of restaurants are less. Still it seems like the customers are more satisfied with the restaurants having table booking. Customers tend to rate sophisticated restaurants highly because of psycholigical reasons or because simply the restaurants are good. Since one bad rating can bring down the average significantly as the number of restaurants are less.
sns.boxplot(x = "Is delivering now", y = "Aggregate rating", data = final_data)
plt.title('The dependence of the rating on the availability of delivery')
plt.show()
This box plot clearly shows that restaurants have almost no connection with the rating when we take into consideration "The availability of Delivery". Restaurants having delivery have a rating a little less than 3.5 whereas those not having delivery, have a rating of just above 3.2
import plotly.graph_objects as go
Delhi = data[(data.City == 'New Delhi')]
fig = go.Figure(data=[go.Bar(
x=Delhi.Locality.value_counts().head(10).index,
y=Delhi.Locality.value_counts().head(10),
)])
fig.show()
Connaught Place has the most number of restaurants in Delhi, around 122. Other localities do not lag behind.
cuisine_val = data.Cuisines.value_counts()
cuisine_label = data.Cuisines.value_counts().index
fig = go.Figure(data=[go.Pie(labels=cuisine_label[:10], values=cuisine_val[:10], textinfo='label+percent',
insidetextorientation='radial',title='Top 10 Cuisine'
)])
fig.show()
top_locality = Delhi.Locality.value_counts().head(10)
plt.figure(figsize=(12,6))
ax = sns.countplot(y= "Locality", hue="Has Online delivery", data=Delhi[Delhi.Locality.isin(top_locality.index)])
plt.title('Resturants Online Delivery');
Online Delivery seems to be on the higher side in Defence colony and Malviya Nagar. Other than Shahdara locality ,in other restaurants localities accept online delivery.
import plotly.express as px
fig = px.scatter(Delhi, x="Average Cost for two", y="Aggregate rating", color='Price range',)
fig.show()
This graph clearly indicates that the Rating does not depend on the average cost for two. Restaurants having lower ratings have high average cost for two and vice versa.
Delhi['Rating text'].value_counts()
Average 2495 Not rated 1425 Good 1128 Very Good 300 Poor 97 Excellent 28 Name: Rating text, dtype: int64
High_rating = Delhi[Delhi['Rating text'].isin(['Excellent'])]
fig = px.scatter_mapbox(High_rating, lat="Latitude", lon="Longitude", hover_name="City",
hover_data=["Aggregate rating", "Restaurant Name"],
color_discrete_sequence=["fuchsia"], zoom=10, height=300)
fig.update_layout(mapbox_style="open-street-map")
fig.update_layout(title='Highle rated Resturants Location',
autosize=True,
hovermode='closest',
showlegend=False)
fig.update_layout(
autosize=False,
width=800,
height=500,)
fig.show()
k = data[(data.City == 'Kolkata')]
k.head(15)
| Restaurant ID | Restaurant Name | Country Code | City | Address | Locality | Locality Verbose | Longitude | Latitude | Cuisines | ... | Currency | Has Table booking | Has Online delivery | Is delivering now | Switch to order menu | Price range | Aggregate rating | Rating color | Rating text | Votes | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2398 | 18217475 | Asia Kitchen by Mainland China | 1 | Kolkata | 4th Floor, Acropolis Mall, 1858/1, Rajdanga Ma... | Acropolis Mall, Kasba | Acropolis Mall, Kasba , Kolkata | 88.393294 | 22.514688 | Asian, Chinese | ... | Indian Rupees(Rs.) | No | Yes | No | No | 3 | 4.6 | Dark Green | Excellent | 945 |
| 2399 | 18249144 | Hoppipola | 1 | Kolkata | 4th Floor, Acropolis Mall, 1858/1, Rajdanga Ma... | Acropolis Mall, Kasba | Acropolis Mall, Kasba , Kolkata | 88.393310 | 22.514585 | Italian, Mexican, American, Mediterranean | ... | Indian Rupees(Rs.) | No | Yes | No | No | 3 | 4.2 | Green | Very Good | 1103 |
| 2400 | 18017612 | Spice Kraft | 1 | Kolkata | 54/1/2A, Hazra Road, Ballygunge Phari, Near Ha... | Ballygunge | Ballygunge, Kolkata | 88.364453 | 22.526461 | Continental, Middle Eastern, Asian | ... | Indian Rupees(Rs.) | No | No | No | No | 3 | 4.8 | Dark Green | Excellent | 1424 |
| 2401 | 18377112 | Nawwarah | 1 | Kolkata | 48A, Syed Amir Ali Avenue, Ballygunge, Kolkata | Ballygunge | Ballygunge, Kolkata | 88.364878 | 22.538731 | Chinese, Cafe, North Indian, Desserts | ... | Indian Rupees(Rs.) | No | No | No | No | 3 | 3.9 | Yellow | Good | 326 |
| 2402 | 20002 | 6 Ballygunge Place | 1 | Kolkata | 6, Ballygunge Place, Ballygunge, Kolkata | Ballygunge | Ballygunge, Kolkata | 88.368628 | 22.527893 | Bengali | ... | Indian Rupees(Rs.) | Yes | Yes | No | No | 3 | 4.4 | Green | Very Good | 1778 |
| 2403 | 18343731 | Mumbai Local | 1 | Kolkata | 19, Ballygunge Park Road, Near Quest Mall, Bal... | Ballygunge | Ballygunge, Kolkata | 88.366217 | 22.533662 | North Indian, Chinese, Street Food | ... | Indian Rupees(Rs.) | Yes | No | No | No | 3 | 4.2 | Green | Very Good | 704 |
| 2404 | 25664 | Gabbar's Bar & Kitchen | 1 | Kolkata | 11/1, Ho Chi Minh Sarani, Camac Street Area, K... | Camac Street Area | Camac Street Area, Kolkata | 88.350680 | 22.547186 | North Indian, Chinese, Mexican, Italian | ... | Indian Rupees(Rs.) | Yes | No | No | No | 3 | 4.4 | Green | Very Good | 1484 |
| 2405 | 25587 | TGI Friday's | 1 | Kolkata | Forum Mall, 10/3, Elgin Road, Elgin, Kolkata | Elgin | Elgin, Kolkata | 88.349843 | 22.537960 | Tex-Mex, American | ... | Indian Rupees(Rs.) | Yes | Yes | No | No | 3 | 4.0 | Green | Very Good | 911 |
| 2406 | 24530 | Santa's Fantasea | 1 | Kolkata | 9, Ballygunge Terrace, Near Anjali Jewellers, ... | Golpark | Golpark, Kolkata | 88.367830 | 22.515082 | Seafood, Chinese | ... | Indian Rupees(Rs.) | No | No | No | No | 2 | 4.2 | Green | Very Good | 2584 |
| 2407 | 20747 | India Restaurant | 1 | Kolkata | Ground Floor, 1st Floor, 2nd Floor, 34, Karl M... | Kidderpore | Kidderpore, Kolkata | 88.322337 | 22.538999 | Biryani, North Indian, Chinese, Mughlai | ... | Indian Rupees(Rs.) | Yes | Yes | No | No | 2 | 4.6 | Dark Green | Excellent | 1219 |
| 2408 | 21220 | Flame & Grill | 1 | Kolkata | 4th Floor, Mani Square Mall, 164/1, E.M. Bypas... | Mani Square Mall, Kankurgachi | Mani Square Mall, Kankurgachi, Kolkata | 88.400581 | 22.577821 | North Indian, Continental | ... | Indian Rupees(Rs.) | Yes | No | No | No | 3 | 3.9 | Yellow | Good | 1064 |
| 2409 | 25570 | Barbeque Nation | 1 | Kolkata | 24, 1st Floor, Park Center Building, Park Stre... | Park Street Area | Park Street Area, Kolkata | 88.354127 | 22.551084 | North Indian, Chinese | ... | Indian Rupees(Rs.) | No | No | No | No | 3 | 4.9 | Dark Green | Excellent | 1753 |
| 2410 | 20350 | Mocambo | 1 | Kolkata | 25B Park Street, Park Street Area, Kolkata | Park Street Area | Park Street Area, Kolkata | 88.353273 | 22.553227 | Continental, Italian, North Indian | ... | Indian Rupees(Rs.) | No | Yes | No | No | 3 | 3.5 | Yellow | Good | 4464 |
| 2411 | 20870 | BarBQ | 1 | Kolkata | 43-47-55, Park Street Area, Kolkata | Park Street Area | Park Street Area, Kolkata | 88.352310 | 22.552996 | Chinese, North Indian | ... | Indian Rupees(Rs.) | No | Yes | No | No | 2 | 4.2 | Green | Very Good | 5288 |
| 2412 | 20404 | Peter Cat | 1 | Kolkata | 18A, Park Street, Park Street Area, Kolkata | Park Street Area | Park Street Area, Kolkata | 88.352885 | 22.552672 | Continental, North Indian | ... | Indian Rupees(Rs.) | No | Yes | No | No | 3 | 4.3 | Green | Very Good | 7574 |
15 rows × 21 columns
fig = px.bar(k,
x=k.Locality,
#marginal='box',
color=k['Has Table booking'],
#y=k.Locality.value_counts().head(10).index,
#color_discrete_sequence=['Grey', 'Red','Orange','Yellow','Green',"Darkgreen"],
title='Restaurants having table booking and its count for Kolkata')
fig.update_layout(bargap=0.1)
fig.show()
We can observe that number of restaurants offer table booking, most of them being in Park Street area.
k2=k.nlargest(25, 'Average Cost for two')
k2
| Restaurant ID | Restaurant Name | Country Code | City | Address | Locality | Locality Verbose | Longitude | Latitude | Cuisines | ... | Currency | Has Table booking | Has Online delivery | Is delivering now | Switch to order menu | Price range | Aggregate rating | Rating color | Rating text | Votes | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2413 | 24286 | The Irish House | 1 | Kolkata | 5th Floor, Quest Mall, 33, Syed Ali Amir Avenu... | Quest Mall, Ballygunge | Quest Mall, Ballygunge, Kolkata | 88.365507 | 22.539129 | European, American | ... | Indian Rupees(Rs.) | No | No | No | No | 3 | 4.4 | Green | Very Good | 2224 |
| 2405 | 25587 | TGI Friday's | 1 | Kolkata | Forum Mall, 10/3, Elgin Road, Elgin, Kolkata | Elgin | Elgin, Kolkata | 88.349843 | 22.537960 | Tex-Mex, American | ... | Indian Rupees(Rs.) | Yes | Yes | No | No | 3 | 4.0 | Green | Very Good | 911 |
| 2416 | 24452 | Sigree Global Grill | 1 | Kolkata | 1st Floor, Silver Spring Arcade, EM Bypass, Sc... | Silver Spring Arcade, Science City Area | Silver Spring Arcade, Science City Area, Kolkata | 88.400467 | 22.549100 | North Indian | ... | Indian Rupees(Rs.) | Yes | No | No | No | 3 | 4.1 | Green | Very Good | 1616 |
| 2414 | 20842 | Barbeque Nation | 1 | Kolkata | K1, RDB Boulevard, Block EP & GP, Sector 5, Sa... | Sector 5, Salt Lake | Sector 5, Salt Lake, Kolkata | 88.433452 | 22.569358 | North Indian, Chinese | ... | Indian Rupees(Rs.) | No | No | No | No | 3 | 4.9 | Dark Green | Excellent | 5966 |
| 2409 | 25570 | Barbeque Nation | 1 | Kolkata | 24, 1st Floor, Park Center Building, Park Stre... | Park Street Area | Park Street Area, Kolkata | 88.354127 | 22.551084 | North Indian, Chinese | ... | Indian Rupees(Rs.) | No | No | No | No | 3 | 4.9 | Dark Green | Excellent | 1753 |
| 2408 | 21220 | Flame & Grill | 1 | Kolkata | 4th Floor, Mani Square Mall, 164/1, E.M. Bypas... | Mani Square Mall, Kankurgachi | Mani Square Mall, Kankurgachi, Kolkata | 88.400581 | 22.577821 | North Indian, Continental | ... | Indian Rupees(Rs.) | Yes | No | No | No | 3 | 3.9 | Yellow | Good | 1064 |
| 2415 | 18259462 | Ocean Grill | 1 | Kolkata | 1st Floor, Infinity Benchmark, Near RDB Cinema... | Sector 5, Salt Lake | Sector 5, Salt Lake, Kolkata | 88.433187 | 22.569367 | Continental, Seafood, North Indian, Asian | ... | Indian Rupees(Rs.) | Yes | No | No | No | 3 | 3.6 | Yellow | Good | 1040 |
| 2398 | 18217475 | Asia Kitchen by Mainland China | 1 | Kolkata | 4th Floor, Acropolis Mall, 1858/1, Rajdanga Ma... | Acropolis Mall, Kasba | Acropolis Mall, Kasba , Kolkata | 88.393294 | 22.514688 | Asian, Chinese | ... | Indian Rupees(Rs.) | No | Yes | No | No | 3 | 4.6 | Dark Green | Excellent | 945 |
| 2404 | 25664 | Gabbar's Bar & Kitchen | 1 | Kolkata | 11/1, Ho Chi Minh Sarani, Camac Street Area, K... | Camac Street Area | Camac Street Area, Kolkata | 88.350680 | 22.547186 | North Indian, Chinese, Mexican, Italian | ... | Indian Rupees(Rs.) | Yes | No | No | No | 3 | 4.4 | Green | Very Good | 1484 |
| 2399 | 18249144 | Hoppipola | 1 | Kolkata | 4th Floor, Acropolis Mall, 1858/1, Rajdanga Ma... | Acropolis Mall, Kasba | Acropolis Mall, Kasba , Kolkata | 88.393310 | 22.514585 | Italian, Mexican, American, Mediterranean | ... | Indian Rupees(Rs.) | No | Yes | No | No | 3 | 4.2 | Green | Very Good | 1103 |
| 2403 | 18343731 | Mumbai Local | 1 | Kolkata | 19, Ballygunge Park Road, Near Quest Mall, Bal... | Ballygunge | Ballygunge, Kolkata | 88.366217 | 22.533662 | North Indian, Chinese, Street Food | ... | Indian Rupees(Rs.) | Yes | No | No | No | 3 | 4.2 | Green | Very Good | 704 |
| 2400 | 18017612 | Spice Kraft | 1 | Kolkata | 54/1/2A, Hazra Road, Ballygunge Phari, Near Ha... | Ballygunge | Ballygunge, Kolkata | 88.364453 | 22.526461 | Continental, Middle Eastern, Asian | ... | Indian Rupees(Rs.) | No | No | No | No | 3 | 4.8 | Dark Green | Excellent | 1424 |
| 2410 | 20350 | Mocambo | 1 | Kolkata | 25B Park Street, Park Street Area, Kolkata | Park Street Area | Park Street Area, Kolkata | 88.353273 | 22.553227 | Continental, Italian, North Indian | ... | Indian Rupees(Rs.) | No | Yes | No | No | 3 | 3.5 | Yellow | Good | 4464 |
| 2412 | 20404 | Peter Cat | 1 | Kolkata | 18A, Park Street, Park Street Area, Kolkata | Park Street Area | Park Street Area, Kolkata | 88.352885 | 22.552672 | Continental, North Indian | ... | Indian Rupees(Rs.) | No | Yes | No | No | 3 | 4.3 | Green | Very Good | 7574 |
| 2402 | 20002 | 6 Ballygunge Place | 1 | Kolkata | 6, Ballygunge Place, Ballygunge, Kolkata | Ballygunge | Ballygunge, Kolkata | 88.368628 | 22.527893 | Bengali | ... | Indian Rupees(Rs.) | Yes | Yes | No | No | 3 | 4.4 | Green | Very Good | 1778 |
| 2401 | 18377112 | Nawwarah | 1 | Kolkata | 48A, Syed Amir Ali Avenue, Ballygunge, Kolkata | Ballygunge | Ballygunge, Kolkata | 88.364878 | 22.538731 | Chinese, Cafe, North Indian, Desserts | ... | Indian Rupees(Rs.) | No | No | No | No | 3 | 3.9 | Yellow | Good | 326 |
| 2417 | 18017615 | What's Up | 1 | Kolkata | 122A, Southern Avenue, Kolkata | Southern Avenue | Southern Avenue, Kolkata | 88.362504 | 22.514119 | Cafe, Chinese, Continental | ... | Indian Rupees(Rs.) | Yes | No | No | No | 3 | 4.0 | Green | Very Good | 1126 |
| 2411 | 20870 | BarBQ | 1 | Kolkata | 43-47-55, Park Street Area, Kolkata | Park Street Area | Park Street Area, Kolkata | 88.352310 | 22.552996 | Chinese, North Indian | ... | Indian Rupees(Rs.) | No | Yes | No | No | 2 | 4.2 | Green | Very Good | 5288 |
| 2406 | 24530 | Santa's Fantasea | 1 | Kolkata | 9, Ballygunge Terrace, Near Anjali Jewellers, ... | Golpark | Golpark, Kolkata | 88.367830 | 22.515082 | Seafood, Chinese | ... | Indian Rupees(Rs.) | No | No | No | No | 2 | 4.2 | Green | Very Good | 2584 |
| 2407 | 20747 | India Restaurant | 1 | Kolkata | Ground Floor, 1st Floor, 2nd Floor, 34, Karl M... | Kidderpore | Kidderpore, Kolkata | 88.322337 | 22.538999 | Biryani, North Indian, Chinese, Mughlai | ... | Indian Rupees(Rs.) | Yes | Yes | No | No | 2 | 4.6 | Dark Green | Excellent | 1219 |
20 rows × 21 columns
import plotly.express as px
fig = px.scatter_mapbox(k2, lat="Latitude", lon="Longitude", hover_name="City", hover_data=["Aggregate rating",
"Restaurant Name","Average Cost for two",
"Has Table booking"],
color_discrete_sequence=["fuchsia"], zoom=10, height=300)
fig.update_layout(mapbox_style="open-street-map")
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.update_layout(title='Top 25 costly Resturants Location',
autosize=True,
#hovermode='closest',
showlegend=False)
fig.update_layout(
autosize=False,
width=800,
height=500,)
fig.show()
ax = px.bar(k2, x='Restaurant Name',
y='Average Cost for two',
hover_data=['Has Online delivery'] ,
title = 'Top 25 costly restaurant')
ax.show()
Inferences and Conclusions: We’ve drawn many inferences from the survey. Here’s a summary of a few of them:
Restaurants rating is categorized into six categories
Not Rated
Average
Good
Very Good
Excellent